perm filename MAKEII.SAI[11,ALS] blob
sn#049077 filedate 1973-06-14 generic text, type T, neo UTF8
00100
00200 BEGIN "MAKE"
00300
00400 DEFINE ⊂="COMMENT";
00500 REQUIRE "MACROS[1,THO]" SOURCE_FILE;
00600 REQUIRE "COMSUB.HDR[1,THO]" SOURCE_FILE;
00800 REQUIRE "BLOCKS.HDR" SOURCE_FILE;
01000 INTERNAL INTEGER INTOT,M,N,P,INFLAG,HINT,PONY;
01100 INTEGER I,J,J1,K,L,Q,PHPNT,PH2PNT,HPOINT,IMAX,LMID,LMAX,CHAN1,CHAN2,CHAN3,CHAN4,EOF;
01200 INTERNAL INTEGER ARRAY DATBUF[0:1024];
01300 STRING READ1,READ2,READ3,READ4,READ5;
01400 INTERNAL INTEGER I1L,I1H,I2L,I2H,I3L,I3H, INL,INH,NZRNG, FP1L,FP1H,FP2L,FP2H,
01500 ILPB,ILPC, IHPB,IHPC ;
01600 INTERNAL INTEGER NF; ⊂ *** USED IN PREPARE;
01800 LABEL LABEL1,START,O1;
01900
02000 PRELOAD_WITH
02100 '410313000000,
02200 '360313000000,
02300 '330313000000,
02400 '300313000000,
02500 '250313000000,
02600 '220313000000,
02700 '170313000000,
02800 '140313000000,
02900 '110313000000,
03000 '060313000000,
03100 '030313000000,
03200 '000313000000;
03300 INTEGER ARRAY LBYTE2[0:11]; ⊂ These byte pointers are used (by MAC) with the
03400 starting address of the array being referenced
03500 in index register '13 and the relative location
03600 added into the address field;
03700 PRELOAD_WITH
03800 '420213000000,
03900 '370213000000,
04000 '340213000000,
04100 '310213000000,
04200 '260213000000,
04300 '230213000000,
04400 '200213000000,
04500 '150213000000,
04600 '120213000000,
04700 '070213000000,
04800 '040213000000,
04900 '010213000000;
05000 INTEGER ARRAY LBYTE3[0:11];
05100 PRELOAD_WITH
05200 '430113000000,
05300 '400113000000,
05400 '350113000000,
05500 '320113000000,
05600 '270113000000,
05700 '240113000000,
05800 '210113000000,
05900 '160113000000,
06000 '130113000000,
06100 '100113000000,
06200 '050113000000,
06300 '020113000000;
06400 INTEGER ARRAY LBYTE6[0:11];
06500 DEFINE TB="'11",STRIN="STRINGIN";
06600
06700
00100 BEGIN ⊂ GENERATE TABLES;
00200
00300 CHAN1←1; CHAN2←2; CHAN3←3; CHAN4←4;
00400 TABIN(INTOT); ⊂ INPUT TABLES;
00600 START:
00700 OUTSTR(CRLF&"This routine is used to generate SIGNATURE TABLES."&CRLF);
00800 OUTSTR("It will ask a number of questions which must be answered by"&CRLF
00900 &" typing the required information followed by a CR."&CRLF);
05800
05900 OUTSTR(CRLF&"The following input procedures are available"&CRLF);
06000 I←0;
06100 FOR P←0 STEP 1 UNTIL INSIZ DO
06200 BEGIN
06300 IF INNAM[P]≠0 THEN OUTSTR(CVXSTR(INNAM[P])&TB) ELSE DONE;
06400 I←I+1; IF I≥8 THEN BEGIN I←0; OUTSTR(CRLF); END;
06500 END;
06600 OUTSTR(CRLF&LF);
06700 END;
06800
06900 IF (STRIN("DO YOU WANT INPUT TABLES RESET TO ZER0 (YorCR) = "))="Y" THEN
07000 FOR P←0 STEP 1 UNTIL INTOT-1 DO BEGIN
07100 INCNT[P]←0;
07200 I←P*74+10;
07250 TABLES[I-7]←0;
07300 FOR J←I STEP 1 UNTIL I+63 DO TABLES[J]←0; END;
07400
08400 OUTSTR("Available SIGNIFICANT FEATURES are"&CRLF);
08500 J←0; FOR I←0 STEP 1 UNTIL 35 DO BEGIN
08600 IF FLIST[I]=0 THEN DONE;
08700 OUTSTR(CVXSTR(FLIST[I])&TB); J←J+1;
08800 IF J≥8 THEN BEGIN OUTSTR(CRLF); J←0; END;
08900 END; OUTSTR(CRLF);
09000 IF I=0 THEN OUTSTR(TB&TB&"NONE"&CRLF);
10500
10600 OUTSTR("PH list and H list table contains"&CRLF);
10700 OUTSTR(CRLF&"PH"&TB&"Significant features"&CRLF);
10800 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
10900 IF PHLIST[I]=0 THEN DONE;
11000 OUTSTR(CVXSTR(PHLIST[I])&TB);
11100 HPOINT←POINT(1,HLIST[I],-1);
11200 FOR J←0 STEP 1 UNTIL 35 DO
11300 IF (K←ILDB(HPOINT))=1 THEN OUTSTR(CVXSTR(FLIST[J])&" ");
11400 OUTSTR(CRLF);
11500 END;
11600
11700 OUTSTR("Enter corrections or additions. Type PH symbol followed by features. "&CRLF);
11800 OUTSTR("After each CR you will be prompted as to what is expected next."&CRLF);
11900 K←0;
12000 WHILE J≥0 DO BEGIN
12100 IF (READ1←STRIN("PH symbol = ")) ="" THEN DONE;
12200 K←K+1;
12300 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
12400 IF PHLIST[I]=0 THEN PHLIST[I]←CVSIX(READ1);
12500 IF CVSIX(READ1)=PHLIST[I] THEN DONE;
12600 END;
12700 HLIST[I]←0;
12800 WHILE J≥0 DO BEGIN
12900 WHILE J≥0 DO BEGIN
13000 IF (READ2←STRIN("F="))="" THEN DONE;
13100 HPOINT←POINT(1,HLIST[I],-1);
13200 FOR J←0 STEP 1 UNTIL 35 DO BEGIN
13300 IBP(HPOINT);
13400 IF FLIST[J]=0 THEN BEGIN FLIST[J]←CVSIX(READ2);
13500 OUTSTR(READ2&" added to feature list"&CRLF); END;
13600 IF CVSIX(READ2)=FLIST[J] THEN DONE;
13700 END;
13800 IF J≥36 THEN OUTSTR("NOT FOUND"&CRLF) ELSE DONE;
13900 END;
14000 IF READ2 ="" THEN DONE;
14100 DPB(1,HPOINT);
14200 END;
14300 CLRBUF;
14400 END;
14500 OUTSTR(CRLF);
14600 IF K≠0 THEN BEGIN
14700 OUTSTR("PH list and H list table now contains"&CRLF);
14800 OUTSTR(CRLF&"PH"&TB&"Significant features"&CRLF);
14900 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
15000 IF PHLIST[I]=0 THEN DONE;
15100 OUTSTR(CVXSTR(PHLIST[I])&TB);
15200 HPOINT←POINT(1,HLIST[I],-1);
15300 FOR J←0 STEP 1 UNTIL 35 DO
15400 IF (K←ILDB(HPOINT))=1 THEN OUTSTR(CVXSTR(FLIST[J])&" ");
15500 OUTSTR(CRLF);
15600 END;
15700 OUTSTR(CRLF);
15800 END;
00010 ⊂ THIS PAGE IS ADDED TO INCLUDE SELECTIVELY ADJUSTING INPUT TABLES;
00020
00030 INFLAG←0; ⊂ THIS IS SET TO 1 WHEN A NEW INPUT TABLE IS ADDED, USE IT LATER
00040 TO ZERO REMAINING TABLES;
00050
00060 OUTSTR(CRLF&"Following INPUT tables exist");
00070 J←63; L←0;
00080 WHILE TRUE DO
00090 BEGIN "INPUTS"
00100 IF J≠0 THEN BEGIN
00110 OUTSTR(CRLF&"Name"&TB&"Input"&TB); SETFORMAT(1,0);
00120 FOR I←0 STEP 1 UNTIL 7 DO OUTSTR("Feat"&CVS(I)&TB);
00130 FOR L←0 STEP 1 UNTIL INTOT-1 DO BEGIN
00135
00140 OUTSTR(CRLF&CVXSTR(LIST[L])&TB&CVXSTR(INNAM[(TABLES[L*74+4] LAND '777)]));
00150 I←POINT(1,TABLES[L*74+5],-1);
00160 FOR J←0 STEP 1 UNTIL 35 DO IF (ILDB(I))=1 THEN
00170 OUTSTR(TB&CVXSTR(FLIST[J])); END;
00180
00190
00200 IF (STRIN("Do you want to change the name of a input table "))="Y" THEN
00210 WHILE TRUE DO BEGIN
00220 OUTSTR(CRLF&"Old name = "); READ1←INCHWL;
00230 IF READ1="" THEN DONE ELSE
00240 FOR L←0 STEP 1 UNTIL INTOT-1 DO IF LIST[L]=CVSIX(READ1) THEN DONE;
00250 IF L<INTOT THEN BEGIN OUTSTR(CRLF&"New name = ");
00260 LIST[L]←CVSIX(INCHWL); END ELSE
00270 OUTSTR(CRLF&READ1&" not found"); END; ⊂ WHILE TRUE;
00280 END; ⊂ ENDS IF J≠0 PRINTING;
00290 OUTSTR(CRLF&"Now typein the name of input table to be added or changed"&
00300 CRLF&"(WARNING:: adding a new input table destroyes the following) = ");
00310 READ1←INCHWL; IF READ1="" THEN DONE;
00320 FOR L←0 STEP 1 UNTIL INTOT-1 DO IF LIST[L]=CVSIX(READ1) THEN DONE;
00330 IF L≥INTOT THEN BEGIN LIST[INTOT]←CVSIX(READ1);
00340 LIST[INTOT+1]←0; ⊂ ALL FURTHER TABLES ARE DESTROYED;
00350 OUTSTR(CRLF&"New INTOT = "&CVS(INTOT+1)); INFLAG←1;
00360 INTOT←INTOT+1;
00370
00380 L←INTOT-1; ⊂ SET PROPER L TO ADD FEATURES ETC;
00390 END;
00400 I←-1; WHILE I=-1 DO BEGIN OUTSTR(CRLF&"Type the name of input parameter = ");
00410 READ2←INCHWL; FOR I←0 STEP 1 UNTIL INSIZ DO
00420 IF CVSIX(READ2)=INNAM[I] THEN DONE ELSE
00430 IF INNAM[I]=0 THEN BEGIN OUTSTR(CRLF&"not found"); I←-1;
00440 DONE END; END; ⊂ END WHILE I=-1;
00450 TABLES[L*74+4]←'000607000000+I; ⊂ CREATES A POINTER TO PROPER INDAT;
00455 TABLES[L*74+1]←0; ⊂ To insure classed as an I table
00460
00470 K←0; ⊂ STORES THE LEARNING INFO;
00480 WHILE TRUE DO BEGIN OUTSTR(CRLF&"Give the feature to learn on = ");
00490 READ2←INCHWL; IF READ2="" THEN DONE;
00500 FOR I←0 STEP 1 UNTIL 35 DO IF FLIST[I]=CVSIX(READ2) THEN DONE ELSE
00510 IF FLIST[I]=0 THEN BEGIN OUTSTR(CRLF&"not found");
00520 DONE END;
00530 IF I≠-1 THEN K←K+(1 LSH (35-I)); END; ⊂ ENDS WHILE LOOP;
00540 TABLES[L*74+5]←K; ⊂ PLANTS THE LEARNING PATTERN;
00550
00560 IF STRIN("Want a listing ")="Y" THEN J←1 ELSE J←0;
00570
00580 END "INPUTS";
00590
00600
16000 IF (STRIN("Do you want to start fresh from here on YorCR = "))="Y" THEN
16100 BEGIN
16200 FOR I←INTOT STEP 1 UNTIL LISSIZ-1 DO LIST[I]←0;
16300 FOR I←INTOT*74 STEP 1 UNTIL TABSIZ-1 DO TABLES[I]←0;
16400 END;
16500 J←63; L←INTOT; ⊂ Temporary use as flags;
16600
16700 OUTSTR(CRLF&"The following tables exist"&CRLF);
16800 WHILE L<LISSIZ%10-1 DO
16900 BEGIN
17000 IF J≠0 THEN BEGIN
17100 OUTSTR(CRLF&"Name"&TB&"TYPE"&TB&"Learn"&TB&"Gate1"&TB&"Gate2"&TB&"Gate3"&TB&"Gate4"&TB&"IN1"&TB&"IN2"&TB&"IN3"&CRLF);
17200 FOR L←INTOT STEP 1 UNTIL LISSIZ%10-2 DO
17300 IF LIST[L]≠0 THEN IF LIST[L]≠1 THEN BEGIN "DECODE" STRING LEARN;INTEGER K1,K2,K3,K4;
17400 IF LIST[L+LISSIZ%10]≥CVSIX("Q0") THEN BEGIN
17500 K←LIST[L+LISSIZ%5]; K1←K LSH -18; K2←(K LSH 18) LSH -30;
17600 K3←(K LSH 24) LSH -30; K4←(K LSH 30) LSH -30;
17700 LEARN←CVXSTR(PHLIST[K1])[1 TO 2]&CVXSTR(PHLIST[K2])[1 TO 2]&
17800 CVXSTR(PHLIST[K3])[1 TO 2]&CVXSTR(PHLIST[K4])[1 TO 2];
17900 END
18000 ELSE LEARN←CVXSTR(LIST[L+LISSIZ%5]);
18100 OUTSTR(CVXSTR(LIST[L])&TB&CVXSTR(LIST[L+LISSIZ%10])&
18200 LEARN);
18210 Q←POINT(1,LIST[L+3*LISSIZ%10],-1); K←1;
18220 FOR J←0 STEP 1 UNTIL 35 DO IF (ILDB(Q))=1 THEN BEGIN K←K+1;
18230 OUTSTR(TB&CVXSTR(FLIST[J])); END;
18240 FOR Q←K STEP 1 UNTIL 4 DO OUTSTR(TB);
18250 OUTSTR(TB&CVXSTR(LIST[L+4*LISSIZ%10])&TB&
18400 CVXSTR(LIST[L+LISSIZ%2])&TB&CVXSTR(LIST[L+6*LISSIZ%10])&TB&CRLF); END "DECODE";
18700 LMAX←L;
18800 END;
18900 OUTSTR(CRLF); IF L=0 THEN OUTSTR(TB&TB&"NONE"&CRLF);
19000 CLRBUF;
19100
19200 OUTSTR(CRLF&"Now type the name of a table to be modified or added."&CRLF&
19300 "(WARNING Do NOT change type P to Q or Viceversa)"&CRLF);
19400 IF (READ1←STRIN("A CR. only, terminates the session. Name= "))="" THEN DONE;
19500 FOR L←INTOT STEP 1 UNTIL LISSIZ%10-1 DO BEGIN
19600 IF LIST[L]=0 THEN LIST[L]←CVSIX(READ1);
19700 IF CVSIX(READ1)=LIST[L] THEN DONE;
19800 END;
19900 IF L≥LISSIZ%10 THEN BEGIN OUTSTR("TOO MANY TABLES****"&CRLF); DONE; END;
20000 I←L*74;
20100 WHILE ¬EQU(READ1,"Q") DO IF ¬EQU(READ1,"P") THEN
20200 READ1←(STRIN("Specify table type P or Q = ")) ELSE DONE;
20300 P←CVD( STRIN("Number of inputs (2 3 or 6) = "));
20400 LIST[L+LISSIZ%10]←CVSIX(READ1&CVS(P));
20500 TABLES[I+1]←(P LSH 24);
20600 IF READ1="Q" THEN BEGIN
20700 LIST[L+1]←1; ⊂ EXTRA SPACE FOR Q TABLES;
20800 TABLES[I+1]←TABLES[I+1]+(1 LSH 30); ⊂ 1 IF Q OTHERWISE 0;
20900 TABLES[I+75]←(2 LSH 30); ⊂ 2 DENOTES Q EXTENSION;
21000 OUTSTR("Four PH symbols needed"&CRLF);
21100 WHILE J≥0 DO BEGIN
21200 READ2←STRIN("First PH = ");
21300 FOR J←0 STEP 1 UNTIL 63 DO IF CVSIX(READ2)=PHLIST[J] THEN DONE;
21400 IF J≥64 THEN OUTSTR("NOT FOUND, TRY AGAIN****"&CRLF) ELSE DONE;
21500 END;
21600 TABLES[I+2]←(J LSH 18); ⊂ Four ph values saved in learn for Q tables;
21700
21800 WHILE J≥0 DO BEGIN
21900 READ3←STRIN("Second PH= ");
22000 FOR J←0 STEP 1 UNTIL 63 DO IF CVSIX(READ3)=PHLIST[J] THEN DONE;
22100 IF J≥64 THEN OUTSTR("NOT FOUND, TRY AGAIN****"&CRLF) ELSE DONE;
22200 END;
22300 TABLES[I+2]←TABLES[I+2]+(J LSH 12);
22400 WHILE J≥0 DO BEGIN
22500 READ4←STRIN("Third PH= ");
22600 FOR J←0 STEP 1 UNTIL 63 DO IF CVSIX(READ4)=PHLIST[J] THEN DONE;
22700 IF J≥64 THEN OUTSTR("NOT FOUND, TRY AGAIN****"&CRLF) ELSE DONE;
22800 END;
22900 TABLES[I+2]←TABLES[I+2]+(J LSH 6);
23000 WHILE J≥0 DO BEGIN
23100 READ5←STRIN("Fourth PH= ");
23200 FOR J←0 STEP 1 UNTIL 63 DO IF CVSIX(READ5)=PHLIST[J] THEN DONE;
23300 IF J≥64 THEN OUTSTR("NOT FOUND, TRY AGAIN****"&CRLF) ELSE DONE;
23400 END;
23500 TABLES[I+2]←TABLES[I+2]+J;
23600 ⊂ PHPNT←POINT(6,K,11); ⊂ PH2PNT←POINT(12,K,11);
23700 ⊂ K←CVSIX(READ2);
23800 ⊂ IF LDB(PHPNT)=0 THEN READ2←READ2&" ";
23900 ⊂ K←CVSIX(READ3);
24000 ⊂ IF LDB(PHPNT)=0 THEN READ3←READ3&" ";
24100 ⊂ K←CVSIX(READ4);
24200 ⊂ IF LDB(PHPNT)=0 THEN READ4←READ4&" ";
24300
24400 ⊂ LIST[L+2*LISSIZ%10]←CVSIX(READ2&READ3&READ4);
24500 LIST[L+LISSIZ%5]←TABLES[I+2];
24600 END ELSE BEGIN
24700 WHILE J≥0 DO BEGIN
24800 READ2←STRIN("One SIGNIFICANT FEATURE needed = ");
24900 FOR J←0 STEP 1 UNTIL 35 DO IF CVSIX(READ2)= FLIST[J] THEN DONE;
25000 IF J≥36 THEN OUTSTR("NOT FOUND. TRY AGAIN****"&CRLF) ELSE DONE;
25100 END;
25200 LIST[L+2*LISSIZ%10]←CVSIX(READ2);
25300 TABLES[I+2]←((35-J) LSH 30) + '000113000002;
25400 ⊂ Creates a pointer word which points to the J-th bit in the word PONY;
25500 END;
25600 J←LMAX;
00010 WHILE TRUE DO BEGIN OUTSTR(CRLF&"Tables are now gated during learning on features");
00015 J←0; ⊂ STORES THE LEARNING INFO;
00020 WHILE TRUE DO BEGIN OUTSTR(CRLF&"Give a feature to gate on = ");
00030 READ2←INCHWL; IF READ2="" THEN DONE;
00040 FOR Q←0 STEP 1 UNTIL 35 DO IF FLIST[Q]=CVSIX(READ2) THEN DONE ELSE
00050 IF FLIST[Q]=0 THEN BEGIN OUTSTR(CRLF&"not found"); Q←-1;
00060 DONE END;
00070 IF Q≠-1 THEN J←J+(1 LSH (35-Q)); END; ⊂ ENDS WHILE LOOP;
00080 LIST[L+3*LISSIZ%10]←TABLES[I+3]←J; ⊂ PLANTS THE LEARNING PATTERN;
00090
00100 IF STRIN("Want a listing of features")="Y" THEN BEGIN
00200 Q←POINT(1,TABLES[I+3],-1);
00210 FOR J←0 STEP 1 UNTIL 35 DO IF (ILDB(Q))=1 THEN
00220 OUTSTR(TB&CVXSTR(FLIST[J]));
00320 IF STRIN("WANT TO REDO THESE ")≠"Y" THEN DONE; END ELSE DONE END;
00420 J←0;
00520
25700
27600 LABEL1: WHILE J≥0 DO
27700 BEGIN
27800 READ2←STRIN("Name of table for the first input. IN1= ");
27900 FOR J←0 STEP 1 UNTIL LMAX DO IF LIST[J]=CVSIX(READ2) THEN DONE;
28000 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
28100 END;
28200 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
28300 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
28400 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
28500 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; END;
28600 IF K>11 THEN K←11; IF K<0 THEN K←0;
28700 LIST[L+4*LISSIZ%10]←CVSIX(CVS(K)&READ2);
28800 IF P=2 THEN TABLES[I+4]←LBYTE2[K]+J1*74; ⊂ Store byte pointer in IN1;
28900 IF P=3 THEN TABLES[I+4]←LBYTE3[K]+J1*74;
29000 IF P=6 THEN TABLES[I+4]←LBYTE6[K]+J1*74;
29100
29200
29300 WHILE J≥0 DO
29400 BEGIN
29500 READ2←STRIN("Type name of second input table. IN2= ");
29600 FOR J←0 STEP 1 UNTIL LMAX DO IF CVSIX(READ2)=LIST[J] THEN DONE ;
29700 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
29800 END;
29900 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
30000 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
30100 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
30200 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; END;
30300 IF K>11 THEN K←11; IF K<0 THEN K←0;
30400 LIST[L+5*LISSIZ%10]←CVSIX(CVS(K)&READ2);
30500 IF P=2 THEN TABLES[I+5]←LBYTE2[K]+J1*74; ⊂ Store byte pointer in IN2;
30600 IF P=3 THEN TABLES[I+5]←LBYTE3[K]+J1*74;
30700 IF P=6 THEN TABLES[I+5]←LBYTE6[K]+J1*74;
30800
30900 IF P≥3 THEN BEGIN
31000
31100 WHILE J≥0 DO
31200 BEGIN
31300 READ2←STRIN("Type name of third input table. IN3= ");
31400 FOR J←0 STEP 1 UNTIL LMAX DO IF LIST[J]=CVSIX(READ2) THEN DONE;
31500 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
31600 END;
31700 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
31800 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
31900 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
32000 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; END;
32100 IF K>11 THEN K←11; IF K<0 THEN K←0;
32200 LIST[L+6*LISSIZ%10]←CVSIX(CVS(K)&READ2);
32300 IF P=3 THEN TABLES[I+6]←LBYTE3[K]+J1*74;
32400 IF P=6 THEN TABLES[I+6]←LBYTE6[K]+J1*74; ⊂ STORE BYTE POINTER IN IN3;
32500 END; ⊂ End of P≥3 section;
32600
32700 IF P≥4 THEN BEGIN
32800
32900 WHILE J≥0 DO
33000 BEGIN
33100 READ2←STRIN("Name of table for the fourth input IN4= ");
33200 FOR J←0 STEP 1 UNTIL LMAX DO IF LIST[J]=CVSIX(READ2) THEN DONE;
33300 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
33400 END;
33500 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
33600 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
33700 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
33800 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; END;
33900 IF K>11 THEN K←11; IF K<0 THEN K←0;
34000 LIST[L+7*LISSIZ%10]←CVSIX(CVS(K)&READ2);
34100 TABLES[I+7]←LBYTE6[K]+J1*74; ⊂ Store byte pointer in IN4;
34200
34300
34400 WHILE J≥0 DO
34500 BEGIN
34600 READ2←STRIN("Type name of fifth input table. IN5= ");
34700 FOR J←0 STEP 1 UNTIL LMAX DO IF CVSIX(READ2)=LIST[J] THEN DONE ;
34800 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
34900 END;
35000 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
35100 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
35200 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
35300 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K;END;
35400 IF K>11 THEN K←11; IF K<0 THEN K←0;
35500 LIST[L+8*LISSIZ%10]←CVSIX(CVS(K)&READ2);
35600 TABLES[I+8]←LBYTE6[K]+J1*74; ⊂ Store byte pointer in IN5;
35700
35800 WHILE J≥0 DO
35900 BEGIN
36000 READ2←STRIN("Type name of sixth input table. IN6= ");
36100 FOR J←0 STEP 1 UNTIL LMAX DO IF LIST[J]=CVSIX(READ2) THEN DONE;
36200 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
36300 END;
36400 K←CVD(STRIN(" Type recency of datum to be used = ")); J1←J;
36500 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q0") THEN
36600 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
36700 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; END;
36800 IF K>11 THEN K←11; IF K<0 THEN K←0;
36900 LIST[L+9*LISSIZ%10]←CVSIX(CVS(K)&READ2);
37000 TABLES[I+9]←LBYTE6[K]+J1*74; ⊂ Store byte pointer in IN6;
37100
37200 END; ⊂ End of IF P≥4 THEN statement;
37300 IF STRIN("Want listing (Y or CR) = ")="Y" THEN J←6 ELSE J←0;
37400 END; ⊂ End of WHILE L≤63 DO statement (usually by DONE signal);
37500
37600 IF STRIN("Should tables(excluding INPUT) be zeroed (Y or N) = ")="Y" THEN
37700 FOR I←10+INTOT*74 STEP 74 UNTIL TABSIZ-64 DO
37800 FOR J←I STEP 1 UNTIL I+63 DO TABLES[J]←0;
37900
38000 IF (STRIN("Do you want to start fresh from here (counters) on Y or CR ="))="Y" THEN
38100 BEGIN FOR I←0 STEP 1 UNTIL TBLSIZ DO TABLET[I]←0; END;
38200
38300 L←0; J←63;
38400 OUTSTR(CRLF&"The following counters exist"&CRLF);
38500 WHILE L<TBLSIZ%5 DO
38600 BEGIN
38700 IF J≠0 THEN BEGIN L←0;
38800 OUTSTR(CRLF&"Name"&TB&"Input"&TB&"Level"&TB&"Hysteresis"&CRLF);
38900 FOR I←0 STEP 5 UNTIL TBLSIZ-1 DO
39000 IF TABLET[I+1]≠0 THEN BEGIN
39100 OUTSTR(CVXSTR(TABLET[I+1])&TB&CVXSTR(TBLIS[L])&TB&
39200 CVS(LDB(POINT(3,TABLET[I+2],3)))&TB&
39300 CVS(LDB(POINT(2,TABLET[I+2],5)))&CRLF);
39400 L←L+1; END;
39500 OUTSTR(CRLF); IF L=0 THEN OUTSTR(TB&TB&"NONE"&CRLF);
39600 END;
39700
39800 CLRBUF;
39900 OUTSTR(CRLF&"Now type in the name of counter to be modified or added"&CRLF);
40000 IF (READ1←STRIN(" A CR only terminates the session.Name= "))="" THEN DONE;
40100 FOR I←0 STEP 5 UNTIL TBLSIZ DO BEGIN
40200 IF TABLET[I+1]=0 THEN TABLET[I+1]←CVSIX(READ1);
40300 IF TABLET[I+1]=CVSIX(READ1) THEN DONE;
40400 END;
40500 IF I≥TBLSIZ-5 THEN BEGIN OUTSTR("COUNTER SPACE EXHAUSTED ***"&CRLF); DONE END;
40600
40700 J←LMAX;
40800 WHILE J≥0 DO BEGIN
40900 READ2←STRIN(" Type name of table for input = ");
41000 FOR J←0 STEP 1 UNTIL LMAX DO IF CVSIX(READ2)=LIST[J] THEN DONE;
41100 IF J>LMAX THEN OUTSTR("Name not found"&CRLF) ELSE DONE;
41200 END;
41300
41400
41500
41600 J1←J; K←0; READ3←"";
41700 IF J≥INTOT THEN IF LIST[J+LISSIZ%10]≥CVSIX("Q") THEN
41800 BEGIN IF K>1 THEN BEGIN J1←J1+1; K←K-2 END;
41900 K←CVD(STRIN("Which PH (0,1,2,3,4 or 5 for max) = "))+6*K; READ3←"Q"; END;
42000 IF K>11 THEN K←11; IF K<0 THEN K←0;
42100 TABLET[I+4]←LBYTE2[K]+J1*74; ⊂ Store byte pointer to INPUT;
42200 SETFORMAT(1,0);TBLIS[I%5]←CVSIX(READ3&CVS(K)&READ2);
42300 Q←CVD(STRIN("Specify counter trigger level (1-7) = "));
42400 IF Q≤0 THEN Q←1;
42500 K←CVD(STRIN("Specify hysteresis time (0-3) = "));
42600 IF K<0 THEN K←0 ; IF K≥3 THEN K←3;
42700 TABLET[I+2]←Q LSH 32 + K LSH 30;
42800 IF STRIN("Want listing (Y or CR) = ")="Y" THEN J←36 ELSE J←0;
42900 END ; ⊂ ENDS WHILE L≤ LOOP;
43000
43100
43200 O1: TABOUT;
43300 OUTSTR("Tables in machine usable form filed as TABLES.DAT"&CRLF&LF);
43400 CLOSE(CHAN2); OPEN(CHAN2,"DSK",'10,0,10,0,0,0);
43500 ENTER(CHAN2,"SIGLST.DAT",0);
43600 ARRYOUT(CHAN2,LIST[0],LISSIZ);
43700 WORDOUT(CHAN2,INTOT);
43800 ARRYOUT(CHAN2,TBLIS[0],TBLSIZ%5);
43900 CLOSE(CHAN2);
44000 OUTSTR("List array in machine readable form is in SIGLST.DAT"&CRLF);
44100
44200 OPEN(CHAN3,"DSK",0,0,10,0,0,EOF);
44300 ENTER(CHAN3,"TABLES.DOC",0);
44400 OUT(CHAN3,TB&"SIGNATURE TABLE SET-UP AS OF "&DATIME(NULL)&CRLF&LF);
44500 OUT(CHAN3,"The following input tables exist"&CRLF);
44600 I←0;
44700 FOR P←0 STEP 1 UNTIL INSIZ DO
44800 BEGIN
44900 IF INNAM[P]≠0 THEN OUT(CHAN3,CVXSTR(INNAM[P])&TB) ELSE DONE;
45000 I←I+1; IF I≥8 THEN BEGIN I←0; OUT(CHAN3,CRLF); END;
45100 END;
45200 OUT(CHAN3,CRLF&LF);
45300 OUT(CHAN3,"Available SIGNIFICANT FEATURES are"&CRLF);
45400 J←0; FOR I←0 STEP 1 UNTIL 35 DO BEGIN
45500 IF FLIST[I]=0 THEN DONE;
45600 OUT(CHAN3,CVXSTR(FLIST[I])&TB); J←J+1;
45700 IF J≥8 THEN BEGIN OUT(CHAN3,CRLF); J←0; END;
45800 END; OUT(CHAN3,CRLF);
45900 OUT(CHAN3,CRLF);
46000 OUT(CHAN3,"PH list and H list table contains"&CRLF);
46100 OUT(CHAN3,CRLF&"PH"&TB&"Significant features"&CRLF);
46200 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
46300 IF PHLIST[I]=0 THEN DONE;
46400 OUT(CHAN3,CVXSTR(PHLIST[I])&TB);
46500 HPOINT←POINT(1,HLIST[I],-1);
46600 FOR J←0 STEP 1 UNTIL 35 DO
46700 IF (K←ILDB(HPOINT))=1 THEN OUT(CHAN3,CVXSTR(FLIST[J])&" ");
46800 OUT(CHAN3,CRLF);
46900 END;
47000 OUT(CHAN3,CRLF); IF I=0 THEN OUT(CHAN3,TB&TB&"NONE"&CRLF);
00010 OUT(CHAN3,CRLF&"The following input tables exist");
00015 OUT(CHAN3,CRLF&CRLF&"Name"&TB&"Input"&TB); SETFORMAT(1,0);
00020 FOR I←0 STEP 1 UNTIL 5 DO OUT(CHAN3,"Feat"&CVS(I)&TB);
00030 FOR L←0 STEP 1 UNTIL INTOT-1 DO BEGIN
00040 OUT(CHAN3,CRLF&CVXSTR(LIST[L])&TB&CVXSTR(INNAM[(TABLES[L*74+4] LAND '777)]));
00050 I←POINT(1,TABLES[L*74+5],-1);
00060 FOR J←0 STEP 1 UNTIL 35 DO IF (ILDB(I))=1 THEN
00070 OUT(CHAN3,TB&CVXSTR(FLIST[J])); END;
47100 OUT(CHAN3,CRLF&"The following tables exist"&CRLF);
47200 OUT(CHAN3,CRLF&"Name"&TB&"TYPE"&TB&"Learn"&TB&"Gate1"&TB&"gate2"&TB&"Gate3"&TB&"Gate4"&TB&"IN1"&TB&"IN2"&TB&"IN3"&CRLF);
47300 FOR L←INTOT STEP 1 UNTIL LISSIZ%10-2 DO
47400 IF LIST[L]≠0 THEN IF LIST[L]≠1 THEN BEGIN "DECODE" STRING LEARN;INTEGER K1,K2,K3,K4;
47500 IF LIST[L+LISSIZ%10]≥CVSIX("Q0") THEN BEGIN
47600 K←LIST[L+LISSIZ%5]; K1←K LSH -18; K2←(K LSH 18) LSH -30;
47700 K3←(K LSH 24) LSH -30; K4←(K LSH 30) LSH -30;
47800 LEARN←CVXSTR(PHLIST[K1])[1 TO 2]&CVXSTR(PHLIST[K2])[1 TO 2]&
47900 CVXSTR(PHLIST[K3])[1 TO 2]&CVXSTR(PHLIST[K4])[1 TO 2];
48000 END
48100 ELSE LEARN←CVXSTR(LIST[L+LISSIZ%5]);
48110
48200 OUT(CHAN3,CVXSTR(LIST[L])&TB&CVXSTR(LIST[L+LISSIZ%10])&
48300 LEARN);
48310 I←POINT(1,LIST[L+3*LISSIZ%10],-1); K←1;
48315 FOR J←0 STEP 1 UNTIL 35 DO IF (ILDB(I))=1 THEN BEGIN K←K+1;
48320 OUT(CHAN3,TB&CVXSTR(FLIST[J])); END;
48330 FOR I←K STEP 1 UNTIL 4 DO OUT(CHAN3,TB);
48340 OUT(CHAN3,TB&CVXSTR(LIST[L+4*LISSIZ%10])&TB&
48500 CVXSTR(LIST[L+LISSIZ%2])&TB&CVXSTR(LIST[L+6*LISSIZ%10])&CRLF); END "DECODE";
48800 OUT(CHAN3,CRLF); OUT(CHAN3,CRLF&"The following counters exist"&CRLF);
48900
49000 SETFORMAT(1,0);
49100
49200 OUT(CHAN3,CRLF&"Name"&TB&"Input"&TB&"Level"&TB&"Hysteresis"&CRLF);
49300 L←0; FOR I←0 STEP 5 UNTIL TBLSIZ-1 DO
49400 IF TABLET[I+1]≠0 THEN BEGIN
49500 OUT(CHAN3,CVXSTR(TABLET[I+1])&TB&CVXSTR(TBLIS[L])&TB&
49600 CVS(LDB(POINT(3,TABLET[I+2],3)))&TB&
49700 CVS(LDB(POINT(2,TABLET[I+2],5)))&CRLF);
49800 L←L+1; END;
49900 IF L=0 THEN OUT(CHAN3,TB&TB&"NONE");
50000 OUT(CHAN3,CRLF);
50100 CLOSE(CHAN3);
50200 OUTSTR("Description of tables filed as TABLE.DOC"&CRLF&LF);
50300 IF STRIN("Do you want to review all changes (YorCR) = ")="Y" THEN GO TO START;
51200
53000 END; ⊂ End of INTERNAL PROCEDURE MAKE;
53100 END "MAKE";